home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_d / isamexpt.zip / UUSEISAM.INT < prev    next >
Text File  |  1996-04-05  |  11KB  |  311 lines

  1. unit Uuseisam;
  2.  
  3.  
  4. interface
  5.  
  6.  
  7. USES Filer, UToolDll, isamtool;
  8.  
  9. procedure DIEE; { Fehlerkontrolle / Displays errormessage}
  10. Procedure DIE;
  11. function  IA:boolean; {Testet, ob Dialog-Meldung vorliegt und löscht sie
  12.                        tests and deletes dialog-message}
  13. function NotFound:boolean; {Testet, ob bei letzter Op. "nicht gef." herauskam
  14.                        true, if last skip failed}
  15.  
  16. const Isamwsnr : Longint = 1;
  17.       MySAVE   : Boolean = FALSE;
  18.  
  19. var
  20.   SatzNoAngel : longint;
  21.   IsamFehler  : Integer Absolute IsamError;
  22.   InitCount   : Integer;
  23.  
  24.  
  25.  
  26. type
  27.   KeyProc    = Function{(var DSatz;KeyNr:INTEGER):String;}
  28.      ( Var DSatz;
  29.                                  KeyNr : Word ) : IsamKeyStr;
  30.   ChangeProc = Function(var DatOld,DatNew;Len:word):boolean;
  31.  
  32. PROCEDURE EXITIsam; { releases memory, when leaving ISAM}
  33. Function INITIsam(Netz:NetSupportType) : Boolean;
  34.                     { checks memory and inits ISAM}
  35.  
  36. PROCEDURE CLEARKEY(VAR IFBPtr : ISAMFILEBLOCKPTR;KEY: INTEGER);
  37. {Setzt den Datensatzzeiger auf den 1. Schlüssel von Key
  38.  Record-Pointer is set to first position
  39.   IFBPtr  : Dateivariable
  40.   Key     : Keynummer
  41. }
  42.  
  43. PROCEDURE READLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
  44. {Setzt ein READLOCK auf die Datei
  45.   IFBPtr  : Dateivariable
  46. }
  47. PROCEDURE LOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
  48. {Setzt ein LOCK auf die Datei
  49.   IFBPtr  : Dateivariable
  50. }
  51. PROCEDURE UNLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
  52. {Hebt den READLOCK auf
  53.   IFBPtr  : Dateivariable
  54. }
  55.  
  56.  
  57. procedure SatzLesen (Var IFBPtr : IsamFileBlockPtr;RefNr:longint;
  58.                      var Ziel,Dup);
  59. {Liest einen Satz aus der angegebenen Isam-Datei.
  60.  reads record form isam-table
  61.   IFBPtr  : Dateivariable / file-pointer
  62.   RefNr   : Datensatznummer des zu lesenden Satzes
  63.             ->Record-Number
  64.   Ziel    : Variable, in der der Satz gespeichert werden soll
  65.             variable, where record is stored
  66.   Dup     : muß vom selben Typ wie Ziel sein. Wird von den Schreibprozeduren
  67.             verwendet, um festzustellen, ob der Satz inzwischen verändert
  68.             wurde. Darf daher nicht von Hand verändert werden.
  69.             ->same type as ZIEL to check whether record is changed
  70.               by other user.
  71.  
  72.   Bitte anschließend IsamOK beachten.
  73.   Fehlermöglichkeiten: wie bei GetNetRec.
  74. }
  75.  
  76. procedure SatzAendern(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
  77.                       Var Quelle,Dup;Keys:KeyProc;var OK:boolean);
  78. {Schreibt einen geänderten Satz zurück in die Isam-Datei.
  79.  saves changed record into isamfile.
  80.   IFBPtr  : Dateivariable
  81.   RefNr   : Datensatznummer des zurückzuschreibenden Satzes
  82.             -> record-number
  83.   Quelle  : zu schreibender Satz
  84.             -> record to store
  85.   Dup     : muß das von SatzLesen erzeugte Duplikat des alten Satzes enthalten
  86.             -> duplicate of record, to check for changes by other users.
  87.   Keys    : Zeiger auf eine Funktion, die die Datensatzschlüssel ermittelt.
  88.             -> pointer to KEYPROC
  89.             (s. Anmerkungen zu "type KeyProc" weiter oben.)
  90.   OK      : enthält OK nach der Ausführung FALSE, so konnte nicht geschrieben
  91.             werden, weil der Satz inzwischen verändert wurde oder weil das Än-
  92.             dern einen doppelten Hauptschlüssel zur Folge hätte.
  93.             -> true if record could be saved, false if record was changed by
  94.                other user.
  95.   Bitte anschließend IsamOk und OK beachten.
  96.   Fehlermöglichkeiten: wie bei LockFileBlock, GetNetRec, PutNetRec,
  97.   DeleteKey, AddKey, UnlockFile sowie siehe OK.
  98.  
  99. }
  100.  
  101. procedure SatzAnlegen(Var IFBPtr:IsamFileBlockPtr;
  102.                      var Quelle;Keys:KeyProc);
  103. {Legt einen Satz an.
  104.  -> saves new record to isamfile.
  105.  
  106.   IFBPtr  : Dateivariable
  107.   Quelle  : zu schreibender Satz
  108.             -> record, that is to be saved
  109.   Keys    : s. SatzAendern, type KeyProc
  110.  
  111.   Bitte anschließend IsamOK beachten.
  112.   Fehlermöglichkeiten: wie bei LockFileBlock, AddNetRec, AddKey,
  113.   UnlockFile.
  114.  
  115. }
  116.  
  117.  
  118. procedure Satzloeschen(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
  119.                        var Dup;Keys:KeyProc;var OK:boolean);
  120. {Löscht einen Satz.
  121.  -> deletes record described by record-number
  122.  
  123.   IFBPtr  : Dateivariable
  124.   RefNr   : Nummer des zu löschenden Satzes
  125.             -> record-number of record to be deleted
  126.   Dup     : s. SatzAendern
  127.   Keys    : s. SatzAendern, type KeyProc
  128.   OK      : s. SatzAendern
  129.  
  130.   Bitte anschließend IsamOk beachten.
  131.   Fehlermöglichkeiten: s. SatzAendern
  132. }
  133.  
  134. procedure DateiOeffnen (var IFBPtr:IsamFileBlockPtr;Name:String;Save:boolean;
  135.           RSize:longint);
  136. {Öffnet einen Fileblock.
  137.   -> opens fileblock
  138.   IFBPtr  : Dateivariable
  139.   Name    : Pfad+Vorname der Datei
  140.             -> path and filename of table (without extent!)
  141.  
  142.   Save    : TRUE, wenn im Savemodus geöffnet werden soll
  143.             -> true, if open in SAVE-MODE.
  144.   RSize   : Datensatzrecordgröße. Dient der Kontrolle, ob Programm- und
  145.             Dateiversion kompatibel sind.
  146.             -> sizeof(record) to reserve enough memory
  147.  
  148.   Bitte anschließend IsamOk beachten.
  149.   Fehlermöglichkeiten wie Open(Save)NetFileBlock.
  150. }
  151.  
  152. procedure DateiSchliessen (var IFBPtr:IsamFileBlockPtr);
  153. {Schließt einen Fileblock.
  154.   -> closes isamfile
  155.  
  156.   IFBPtr  : Dateivariable
  157.  
  158.   Bitte anschließend IsamOk beachten.
  159.   Fehlermöglichkeiten wie bei CloseNetFileBlock.
  160. }
  161.  
  162. procedure KeySuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
  163.                      var Userdatref:Longint;var Userkey:IsamKeyStr;
  164.                      var Found:boolean);
  165. {Sucht einen Schlüssel.
  166.   -> searches for key.
  167.  
  168.   IFBPtr  : Dateivariable
  169.   Key     : Schlüsselnummer
  170.              -> keynumber
  171.   UserdatRef : erhält die Datensatznummer des gefundenen Schlüssels
  172.              -> returns recordnumber
  173.   UserKey : zu suchender Schlüssel
  174.              -> key that should be found
  175.   Found   : TRUE:  gewünschter Schlüssel wurde gefunden.
  176.              -> true, if found
  177.             FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
  178.              -> false, if not found, because:
  179.               IsamOK=TRUE:  er nicht existiert. Userkey enthält den nächsten
  180.                             größeren Schlüssel.
  181.                  -> Key doesn't exist
  182.               IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
  183.                             führt werden konnte.
  184.                  -> a DOSERROR occured
  185.   Bitte anschließend IsamOk beachten.
  186.   Fehlermöglichkeiten wie bei SearchKey.
  187. }
  188.  
  189. procedure RefSuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
  190.                      var Userdatref:Longint;var Userkey:IsamKeyStr;
  191.                      var Found:boolean);
  192. {Sucht einen Schlüssel mit Referenz.
  193.    -> searches for key with reference
  194.   IFBPtr  : Dateivariable
  195.   Key     : Schlüsselnummer
  196.                -> keynumber
  197.   UserdatRef : Datensatznummer des zu suchenden Schlüssels
  198.                -> recordnumber of key that is to be searched for
  199.   UserKey : zu suchender Schlüssel
  200.                -> keystring
  201.   Found   : TRUE:  gewünschter Schlüssel wurde gefunden.
  202.                -> true, if found
  203.             FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
  204.                -> false, if not found, because ...
  205.               IsamOK=TRUE:  er nicht existiert. Userkey enthält den nächsten
  206.                             größeren Schlüssel.
  207.                   -> Key doesn't exist, Key returns nearest greater key
  208.               IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
  209.                             führt werden konnte.
  210.                   -> a DOSERROR or ISAMERROR occurred
  211.   Bitte anschließend IsamOk beachten.
  212. }
  213.  
  214. procedure SatzEinlesen(var IFBPtr:IsamFileBlockPtr;Key:integer;
  215.                        var Satz,Dup;Keys:KeyProc;var Klar:boolean);
  216. {Liest einen Satz ein. Funktionsweise: Die Felder der Variablen "Satz", die
  217.  bekannt sind, müssen vor Aufruf besetzt werden (z.B. das Kundennummernfeld,
  218.  wenn nach einer Kundennummer gesucht werden soll). Diese Prozedur sucht
  219.  dann den passenden Satz und liest ihn ein.
  220.      -> reads a record from isamtable. Function: those fields of the variable
  221.         "SATZ", that are already known, must be declared before, i.e. Name
  222.         or ZIP-Field, matching record will be searched
  223.    IFBPtr  : Dateivariable
  224.    Key     : Nummer das Schlüssels, anhanddessen gesucht werden soll
  225.                -> Key-Number
  226.    Satz    : s.o., erhält hinterher den kompletten Satz
  227.                -> incomplete Record before search, complete record will be returned
  228.                   if found
  229.    Dup     : s. SatzLesen
  230.    Keys    : s. SatzAendern, type KeyProc
  231.    Klar    : TRUE, wenn der Satz gefunden und ordnungsgemäß gelesen wurde
  232.                 -> true, if found and read without errors
  233.  
  234.    Bitte anschließend IsamOk beachten.
  235.    Fehlermöglichkeiten wie bei SearchKey, GetNetRec.
  236.  }
  237.  
  238. const
  239.   FindFirst  = 0;
  240.   FindLast   = 1;
  241.   FindNext   = 2;
  242.   FindPrev   = 3;
  243.   FindALL    = 4;
  244.  
  245. procedure NachbarKey(var IFBPtr:IsamFileBlockPtr;Key:integer;
  246.                      var UserDatRef:longint;var UserKey:IsamKeyStr;
  247.                      SuchArt:byte);
  248. {Sucht den nächsten bzw. vorigen Schlüssel.
  249.    -> skips to next or previous key
  250.  
  251.   IFBPtr  : Dateivariable
  252.   Key     : Schlüsselnummer -> keynumber
  253.   UserDatRef : erhält die Datensatznummer des gefundenen Schlüssels
  254.                 -> returns recordnumber of record found
  255.   UserKey : erhält den gefundenen Schlüssel
  256.                 -> returns keystring of record found
  257.   SuchArt : 0=der erste Schlüssel wird gesucht
  258.                  -> first key (top of file)
  259.             1=der letzte Schlüssel wird gesucht
  260.                  -> last key (end of file)
  261.             2=der nächste Schlüssel wird gesucht
  262.                  -> next key
  263.             3=der vorige   Schlüssel wird gesucht
  264.                  -> previous key
  265.             4=der erste übereinstimmende Schlüssel (FINDKEY) wird gesucht
  266.                  -> first key nearly matching
  267.  
  268.   Bitte anschließend IsamOk beachten.
  269.   Fehlermöglichkeiten wie bei NextKey, PrevKey, ClearKey.
  270. }
  271.  
  272.  
  273. procedure DeleteAllRecs(var IFBPtr    : IsamFileBlockPtr;
  274.                             VonKey,
  275.                             BisKey    : IsamKeyStr;
  276.                             Key       : integer;
  277.                             Keys      : KeyProc);
  278.  
  279. {Löscht alle Datensätze, die im angegebenen Bereich von Schlüsseln liegen.
  280.     -> deletes all records
  281.  
  282.     IFBPtr  :  bezogener FileBlock
  283.     VonKey  :  kleinster Schlüssel, der gelöscht werden soll
  284.                   -> lowest key to be deleted
  285.     BisKey  :  kleinster Schlüssel, der nicht mehr gelöscht werden soll
  286.                (also obere Grenze, bleibt selbst aber erhalten)
  287.                   -> highest key to be deleted
  288.     Key     :  Schlüsselnummer.
  289. }
  290. procedure LockFile(Var IFBPtr:IsamFileBlockPtr);
  291. procedure UnlockFile(var IFBPtr:IsamFileBlockPtr);
  292. {Achtung: Vor KeysAendern LOCKFILE!!!}
  293. procedure KeysAendern(var IFBPtr:IsamFileBlockPtr;var Quelle,Dup;
  294.           RefNr:longint;Keys:KeyProc;var OK:boolean);
  295.  
  296. const ErrorFile:String = '';
  297.  
  298. var
  299.   NetInUse   : boolean;
  300.  
  301. type
  302.   PrPrTyp   = procedure (s:String);
  303.  
  304. var
  305.   PrPr  : PrPrTyp;
  306.  
  307. const
  308.   IsamAntwort : word = 0;
  309.  
  310. implementation
  311.